package ast;

import visitor.*;

import java.util.ArrayList;
import java.util.List;


public class TipoFuncion extends AbstractTipo
{
	
	public TipoFuncion(Tipo tipo, DeclaVariable variable){
		this.tipo=tipo;
		this.variables=new ArrayList<DeclaVariable>();
		this.variables.add(variable);
	}
	public TipoFuncion(Tipo tipo, List<DeclaVariable> variables){
		this.tipo = tipo;
		this.variables = variables;
	}
	@SuppressWarnings("unchecked")
	public TipoFuncion(Object tipo, Object variables){
		this.tipo = (Tipo)tipo;
		this.variables = (List<DeclaVariable>)variables;
	}


	public Object accept(Visitor v, Object param) { 
		return v.visit(this, param);
	}
	
	public void setIsRefenciaInParams(){
		for(DeclaVariable parametro:variables){
			if(!parametro.tipo.isPrimitivo())
				parametro.isReferencia=true;
		}
	}
	public boolean comprobarTipoParametros(){
		for(DeclaVariable parametro:variables)
			if(!parametro.tipo.isPrimitivo())
				return false;
		return true;
	}
	public boolean isPrimitivo() {
		return false;
	}
	
	@Override
	public String getNombreTipo(){
		return this.tipo.getNombreTipo();
		
	}
	@Override
	public int numeroBytes() {
		return tipo.numeroBytes();
	}
	public Tipo tipo;
	public List<DeclaVariable> variables;
	public int offsetParametros;
}
